package com.itany.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 * Author:shixiaojun@itany.com
 * Date:2022/11/11 14:51
 * Version:1.0-SNAPSHOT
 * Description:
 */
public class Test07 {

    public static void main(String[] args) {
        // 同时保存部门与多个员工
        // 这些员工属于当前添加的部门名下的
        // 假设保存了一个部门d
        // 三个员工:e1、e2、e3
        // 这三个员工对应的dept_id值为当前保存的部门d的主键id值
        Dept dept = new Dept("王者荣耀部","玩游戏的");
        Emp e1 = new Emp("李白",8000.0);
        Emp e2 = new Emp("吕布",9000.0);
        Emp e3 = new Emp("貂蝉",10000.0);
        List<Emp> emps = new ArrayList<>();
        emps.add(e1);
        emps.add(e2);
        emps.add(e3);
        insertDeptAndEmp(dept,emps);
    }

    public static void insertDeptAndEmp(Dept dept, List<Emp> emps){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        Integer id = null;
        try {
            conn = JDBCUtil.getConnection();
            // 由于要同时保存部门与员工
            // 且员工属于当前保存的部门
            // 保存员工时,需要用到部门编号
            // 因此,必须先保存部门,后保存员工
            String sql = new StringBuffer()
                    .append(" insert into ")
                    .append(" t_dept ")
                    .append("   (name,remark)")
                    .append(" values ")
                    .append("   (?,?)")
                    .toString();
            ps = conn.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);
            ps.setString(1,dept.getName());
            ps.setString(2,dept.getRemark());

            // 执行保存部门的sql
            ps.executeUpdate();
            System.out.println("添加部门成功");
            // 接收保存后生成的部门编号的值
            rs = ps.getGeneratedKeys();
            while (rs.next()){
                id = rs.getInt(1);
            }
            // 将生成的部门编号赋值给dept对象
            dept.setId(id);
            sql = new StringBuffer()
                    .append(" insert into ")
                    .append(" t_emp ")
                    .append("   (name,salary,dept_id)")
                    .append(" values ")
                    .append("   (?,?,?)")
                    .toString();
            ps = conn.prepareStatement(sql);
            // 遍历员工对象
            for(Emp emp : emps){
                // 每一个员工均属于当前保存的部门
                // 保存员工时,需要设置外键的值
                // 每一个员工都需要设置dept_id字段的值
                // emp.setDeptId(id);
                emp.setDept(dept);

                ps.setString(1,emp.getName());
                ps.setDouble(2,emp.getSalary());
                ps.setInt(3,emp.getDept().getId());
                // ps.setInt(3,emp.getDeptId());
                // 每遍历一个员工,保存一条数据
                // 执行保存员工的sql
                ps.executeUpdate();
                System.out.println("添加员工成功");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.close(conn,ps,rs);
        }
    }

}
